package com.swolin.juc.semaphore;

import java.util.concurrent.Semaphore;




class Programer extends Thread{

    private Semaphore sp = null;
    public Programer(Semaphore sp) {
        this.sp = sp;
    }
    public void run(){

        System.out.println("达到地铁口请求获取进入地铁站的许可，线程==" + Thread.currentThread().getName());
        try {
            sp.acquire();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("获取到许可了，等待中，线程=="+ Thread.currentThread().getName());

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("上车了真开心，释放许可" + Thread.currentThread().getName());

        sp.release();
    }
}
public class SemaphoreTest {


    /**地铁口限流排队 ， 保证地铁站内人数不超过上限值
     * 因此 一批一批的放人进入地铁站，等前面走了一批，在进入一批、
     * 前面走了一个人，才能放人进入地铁站
     */

    public static void main(String[] args) {
        int subwayMaxNum = 3;
        Semaphore sp = new Semaphore(subwayMaxNum);
        for(int i = 0; i < subwayMaxNum * 10; i++){
            new Programer(sp).start();
        }
    }
}
